package cn.iocoder.yudao.module.wms.service.rdrecord11;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord11.vo.Rdrecord11PageReqVO;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord11.vo.Rdrecord11SaveReqVO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord11.Rdrecord11DO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord11.Rdrecords11DO;

import javax.validation.Valid;
import java.util.List;

/**
 * 材料出库主 Service 接口
 *
 * @author 芋道源码
 */
public interface Rdrecord11Service {

    /**
     * 创建材料出库主
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRdrecord11(@Valid Rdrecord11SaveReqVO createReqVO);

    /**
     * 提交材料出库流程
     *
     * @param id 材料出库id
     */
    void process(Long id);

    /**
     * 更新材料出库主
     *
     * @param updateReqVO 更新信息
     */
    void updateRdrecord11(@Valid Rdrecord11SaveReqVO updateReqVO);

    /**
     * 更新材料出库主状态
     *
     * @param id 编号
     * @param status 结果
     */
    void updateRdrecord11Status(Long id, Integer status);

    /**
     * 删除材料出库主
     *
     * @param id 编号
     */
    void deleteRdrecord11(Long id);

    /**
     * 获得材料出库主
     *
     * @param id 编号
     * @return 材料出库主
     */
    Rdrecord11DO getRdrecord11(Long id);

    /**
     * 获得调拨出库主
     *
     * @param processInstanceId 流程实例id
     * @return 调拨出库主
     */
    Rdrecord11DO getRdrecord11ByProcessInstanceId(String processInstanceId);

    /**
     * 获得材料出库主分页
     *
     * @param pageReqVO 分页查询
     * @return 材料出库主分页
     */
    PageResult<Rdrecord11DO> getRdrecord11Page(Rdrecord11PageReqVO pageReqVO);

    /**
     * 材料出库业务处理
     *
     * @param id 材料出库单id
     * @param type 退(-1),进(1)
     */
    void businessProcessing(Long id, int type);

    // ==================== 子表（材料出库子） ====================

    /**
     * 获得材料出库子列表
     *
     * @param orderId 订单id
     * @return 材料出库子列表
     */
    List<Rdrecords11DO> getRdrecords11ListByOrderId(Long orderId);

}